home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 2848 / 2848.xpi / chrome / passwordexporter.jar / content / pwdex-global.js < prev    next >
Text File  |  2009-08-04  |  12KB  |  261 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is Password Exporter
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  *    Justin Scott <fligtar@gmail.com>.
  18.  *
  19.  * Portions created by the Initial Developer are Copyright (C) 2006
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s): (none)
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  26.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the MPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the MPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37.  
  38. /**
  39.  * Password Exporter - Global
  40.  * This file contains functions used by all flavors of Password Exporter
  41.  */
  42. var CC_loginManager = Components.classes["@mozilla.org/login-manager;1"];
  43. var CC_passwordManager = Components.classes["@mozilla.org/passwordmanager;1"];
  44.  
  45. var passwordExporter = {
  46.     version: '1.1', // Incrementing requires new license acceptance
  47.     bundle: null,
  48.     fxVersion: null,
  49.     isThunderbird: false,
  50.     linebreak: null,
  51.     accepted: false, // whether user has accepted this version's license
  52.     dumpDebug: false, // whether debug message should be dumped to console
  53.     initiated: false, // whether Password Exporter has been initiated yet
  54.     
  55.     export: null, // export functions specific to this app version
  56.     import: null, // import functions specific to this app version
  57.  
  58.     // Called on load and on privacy pref tab load to create the tab overlay because the <tabs> we need doesn't have an ID
  59.     init: function() {
  60.         this.checkDebug();
  61.         this.bundle = srGetStrBundle("chrome://passwordexporter/locale/passwordexporter.properties");
  62.         this.linebreak = this.getLinebreak();
  63.         
  64.         /*
  65.         Due to changes in application versions over time, we break this up into 3 possibilities:
  66.             Firefox 1.5/Thunderbird/Flock/Songbird:
  67.                             - Button on Privacy tab of Preferences window
  68.                             - Tab for importing/exporting in Passwords dialog
  69.                             - Uses nsIPasswordManager
  70.             Firefox 2.0:
  71.                             - Button on Security tab of Preferences window
  72.                             - Uses nsIPasswordManager
  73.             Firefox 3.0:
  74.                             - Button Security tab of Preferences window
  75.                             - Uses nsILoginManager
  76.         */
  77.     
  78.         if (document.getElementById('tabbox'))
  79.             this.fxVersion = 1.5;
  80.         else if (CC_passwordManager != null)
  81.                 this.fxVersion = 2;
  82.         if (CC_loginManager != null)
  83.             this.fxVersion = 3;
  84.         
  85.         this.debug('Firefox or equivalent version detected: ' + this.fxVersion);
  86.         
  87.         if (this.fxVersion < 3 && !Components.interfaces.nsIPasswordInternal) {
  88.             this.isThunderbird = true;
  89.             this.debug('Thunderbird detected');
  90.         }
  91.         
  92.         // Include appropriate import/export functions
  93.         if (this.fxVersion >= 3) {
  94.             this.export = passwordExporterLoginMgr.export;
  95.             this.import = passwordExporterLoginMgr.import;
  96.             this.debug('Import/Export functions set to LoginMgr');
  97.         }
  98.         else {
  99.             this.export = passwordExporterPasswordMgr.export;
  100.             this.import = passwordExporterPasswordMgr.import;
  101.             this.debug('Import/Export functions set to PasswordMgr');
  102.         }
  103.         
  104.         this.initiated = true;
  105.         
  106.         // If we are in the Password Exporter dialog, we don't need to add any buttons
  107.         if (document.getElementById('pwdex-dialog'))
  108.             return;
  109.         
  110.         var hbox;
  111.         
  112.         // If Firefox 1.5, add a new tab and the button
  113.         if (this.fxVersion < 2) {
  114.             var tabbox = document.getElementById('tabbox');
  115.             var tabs = tabbox.firstChild;
  116.             var newtab = document.createElement('tab');
  117.             newtab.setAttribute('label', this.bundle.GetStringFromName('passwordexporter.button-label'));
  118.             newtab.setAttribute('id', 'pwdex-tab');
  119.             tabs.appendChild(newtab);
  120.             
  121.             if (document.getElementById('savePasswords'))
  122.                 hbox = document.getElementById('savePasswords').parentNode.parentNode.getElementsByTagName('hbox')[2];
  123.             else
  124.                 document.getElementById('panePrivacy').addEventListener('paneload',  function(e) { passwordExporter.init(); }, false);
  125.         }
  126.         else if (this.fxVersion >= 2) {
  127.             // If the relevant pane is already showing, we can add the button now
  128.             // Otherwise, we add a listener so we know when it is showing
  129.             
  130.             // Thunderbird only
  131.             if (this.isThunderbird) {
  132.                 if (document.getElementById('encryptEnabled'))
  133.                     hbox = document.getElementById('encryptEnabled').parentNode.getElementsByTagName('hbox')[1];
  134.                 else
  135.                     document.getElementById('panePrivacy').addEventListener('paneload',  function(e) { passwordExporter.init(); }, false);
  136.             }
  137.             else {
  138.                 if (document.getElementById('showPasswordsBox'))
  139.                     hbox = document.getElementById('showPasswordsBox');
  140.                 else if (document.getElementById('paneSecurity'))
  141.                     document.getElementById('paneSecurity').addEventListener('paneload',  function(e) { passwordExporter.init(); }, false);
  142.             }
  143.         }
  144.         
  145.         // Add the button
  146.         if (hbox) {
  147.             var button = document.createElement('button');
  148.             button.setAttribute('label', this.bundle.GetStringFromName('passwordexporter.button-label'));
  149.             button.setAttribute('id', 'pwdex-button');
  150.             button.setAttribute('accesskey', this.bundle.GetStringFromName('passwordexporter.button-accesskey'));
  151.             button.addEventListener('command',  function(e) { passwordExporter.openWindow(); }, false);
  152.             hbox.appendChild(button);
  153.         }
  154.     },
  155.     
  156.     // opens passwordmanager.xul to view passwords.. called from button on pwdexDialog.xul only
  157.     viewPasswords: function() {
  158.         // using window.open, doing certain things will cause firefox to minimize completely when the window is closed
  159.         // hence using window.opener.open
  160.         if (this.isThunderbird)
  161.             window.opener.open("chrome://messenger/content/preferences/viewpasswords.xul", "", "chrome,resizable,centerscreen,maximize=no");
  162.         else
  163.             window.opener.open("chrome://passwordmgr/content/passwordManager.xul", "", "chrome,resizable,centerscreen,maximize=no");
  164.     },
  165.     
  166.     // opens pwdexDialog.xul from privacy/security tab button in preferences
  167.     openWindow: function() {
  168.         var pwdexDiag = window.openDialog("chrome://passwordexporter/content/pwdexDialog.xul", "","chrome,resizable,centerscreen,close=no,modal");
  169.         pwdexDiag.focus();
  170.     },
  171.     
  172.     // checks to see if user has accepted notice for this version and if not, shows window
  173.     checkAgreement: function() {
  174.         var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  175.         
  176.         if (prefs.getPrefType('extensions.passwordexporter.agreeVersion') == prefs.PREF_STRING) {
  177.             if (this.version == prefs.getCharPref('extensions.passwordexporter.agreeVersion')) {
  178.                 this.accepted = true;
  179.                 return true;
  180.             }
  181.         }
  182.         
  183.         prefs = null;
  184.         
  185.         window.openDialog("chrome://passwordexporter/content/firstrunDialog.xul", "","chrome,resizable,centerscreen,close=no,modal");
  186.         return false;
  187.     },
  188.     
  189.     // write pref showing agreement to notice
  190.     setAgreement: function() {
  191.         var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  192.         
  193.         prefs.setCharPref('extensions.passwordexporter.agreeVersion', this.version);
  194.         this.accepted = true;
  195.     },
  196.    
  197.     // returns the linebreak for the system doing the exporting
  198.     getLinebreak: function() {
  199.         if (/win/i.test(navigator.platform))
  200.             return '\r\n';
  201.         else if (/mac/i.test(navigator.platform))
  202.             return '\r';
  203.         else
  204.             return '\n';    
  205.     },
  206.     
  207.     // Disables all buttons during an import/export
  208.     disableAllButtons: function() {
  209.         document.getElementById('pwdex-import-btn').disabled = true;
  210.         document.getElementById('pwdex-export-btn').disabled = true;
  211.         document.getElementById('pwdex-import-never-btn').disabled = true;
  212.         document.getElementById('pwdex-export-never-btn').disabled = true;
  213.         document.getElementById('pwdex-encrypt').disabled = true;
  214.         document.getElementById('pwdex-view-passwords').disabled = true;
  215.         document.getElementById('pwdex-close').disabled = true;
  216.     },
  217.     
  218.     // Re-enables all buttons
  219.     enableAllButtons: function() {
  220.         document.getElementById('pwdex-import-btn').disabled = false;
  221.         document.getElementById('pwdex-export-btn').disabled = false;
  222.         document.getElementById('pwdex-import-never-btn').disabled = false;
  223.         document.getElementById('pwdex-export-never-btn').disabled = false;
  224.         document.getElementById('pwdex-encrypt').disabled = false;
  225.         document.getElementById('pwdex-view-passwords').disabled = false;
  226.         document.getElementById('pwdex-close').disabled = false;
  227.     },
  228.     
  229.     // returns current date in YYYY-MM-DD format for default file names
  230.     getDateString: function() {
  231.         var date = new Date();
  232.         
  233.         return date.getFullYear() + '-' + this.leadingZero(date.getMonth() + 1) + '-' + this.leadingZero(date.getDate());
  234.     },
  235.  
  236.     // returns a number with leading zero
  237.     leadingZero: function(number) {
  238.         return (number < 10 ? '0' + number : number);
  239.     },
  240.     
  241.     // checks preference for debug output
  242.     checkDebug: function() {
  243.         var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  244.                     getService(Components.interfaces.nsIPrefService).getBranch("");
  245.         
  246.         if (prefs.getPrefType('extensions.passwordexporter.debug') == prefs.PREF_BOOL) {
  247.             if (true == prefs.getBoolPref('extensions.passwordexporter.debug'))
  248.                 this.dumpDebug = true;
  249.         }
  250.         
  251.         prefs = null;
  252.     },
  253.     
  254.     // Dumps debug text if pref set
  255.     debug: function(text) {
  256.         if (this.dumpDebug)
  257.             dump('Password Exporter ' + this.version + ': ' + text + "\n");
  258.     }
  259. };
  260.  
  261. window.addEventListener("load",  function(e) { if (!passwordExporter.initiated) passwordExporter.init(); }, false);